package com.leetcode;

import java.util.Scanner;

/**
 * 第一行包含一个正整数x，代表第一个矩阵的行数
 * 第二行包含一个正整数y，代表第一个矩阵的列数和第二个矩阵的行数
 * 第三行包含一个正整数z，代表第二个矩阵的列数
 * 之后x行，每行y个整数，代表第一个矩阵的值
 * 之后y行，每行z个整数，代表第二个矩阵的值
 */
public class 矩阵乘法 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNextLine()) {
            int x = Integer.parseInt(scanner.nextLine());
            int y = Integer.parseInt(scanner.nextLine());
            int z = Integer.parseInt(scanner.nextLine());
            int[][] oneInts = new int[x][y];
            int[][] twoInts = new int[y][z];
            int[][] resultInts = new int[x][z];
            for (int i = 0; i < x; i++) {
                String[] split = scanner.nextLine().split(" ");
                for (int j = 0; j < y; j++) {
                    oneInts[i][j] = Integer.parseInt(split[j]);
                }
            }
            for (int i = 0; i < y; i++) {
                String[] split = scanner.nextLine().split(" ");
                for (int j = 0; j < z; j++) {
                    twoInts[i][j] = Integer.parseInt(split[j]);
                }
            }
            int result = 0, count = 0;
            // 行数
            for (int i = 0; i < x; i++) {
                // 列数 x=2 y=3 z=2
                for (int j = 0; j < z; j++) {
                    for (int k = 0; k < y; k++) {
                        int a = oneInts[i][k];
                        int b = twoInts[k][j];
                        result += (a) * (b);
                    }
                    resultInts[i][j] = result;
                    result = 0;
                }

            }

            for (int[] resultInt : resultInts) {
                for (int i : resultInt) {
                    System.out.print(i + " ");
                }
                System.out.println();
            }
        }
    }
}
